/**
 * listToTree
 */
export function listToTree(menus: IMenu[], parentId: number | null) {
  return menus
    .filter((item) => {
      if (typeof parentId === 'number') {
        return +item.parentId === parentId
      } else {
        return item.parentId === parentId
      }
    })
    .map((item) => {
      // 为了避免修改到原始数据，做一个拷贝
      const curItem = { ...item }
      // 给 item 添加一个 children 字段，字段的值是数组，
      const children = listToTree(menus, item.id)
      if (children.length) {
        curItem.children = children
      }
      // 返回 curItem
      return curItem
    })
}

/**
 * 从一个list数据中，递归获取子级Id的集合
 */
export function getChildrenIds(menus: IMenu[], id: number, result: number[]) {
  // 直接子级Ids
  const ids = menus.filter((item) => +item.parentId === id).map((item) => item.id)
  // 追加到结果集合中
  result.push(...ids)
  // 循环获取子级
  ids.forEach((item) => {
    getChildrenIds(menus, item, result)
  })

  return result
}

/**
 * 判断一个 id 是否属于叶子节点Id
 */
export function isLeafId(menus: IMenu[], id: number) {
  return menus.every((item) => +item.parentId !== id)
}
